package com.example.recordingpen_datacollection.Utils.List;


import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 public class ListSortUtil {
     /**
     * 对List对象按照某个成员变量进行排序
     * @param list List对象
     * @param sortField 排序的属性名称
     * @param sortMode 排序方式：ASC（升序），DESC（降序） 之一
     */
    public static <T> void sort(List<T> list, final String sortField, final String sortMode) {
        Comparator<T> comparator = new Comparator<T>() {
            public int compare(T obj1, T obj2) {
                int result = 0;
                try {
                    // 获取obj1和obj2的sortField属性的值
                    Object value1 = ReflectUtil.getFieldValue(obj1, sortField);
                    Object value2 = ReflectUtil.getFieldValue(obj2, sortField);
                    // 判断是否为数字类型
                    if (value1 instanceof Number && value2 instanceof Number) {
                        double val1 = ((Number) value1).doubleValue();
                        double val2 = ((Number) value2).doubleValue();
                        result = val1 > val2 ? 1 : (val1 == val2 ? 0 : -1);
                    } else {
                        // 对字符串类型进行排序
                        String str1 = value1.toString();
                        String str2 = value2.toString();
                        result = str1.compareTo(str2);
                    }
                    // 根据排序方式进行排序
                    if ("DESC".equals(sortMode)) {
                        result = -result;
                    }
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
                return result;
            }
        };
        Collections.sort(list, comparator);
    }
}